//在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串（例如"RXXLRXRXL"）中进行移动操作。一次移动操作指用一个"LX"替换一个"XL"，或
//者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end，请编写代码，当且仅当存在一系列移动操作使得start可以转换成end时， 返回T
//rue。 
//
// 
//
// 示例 : 
//
// 输入: start = "RXXLRXRXL", end = "XRLXXRRLX"
//输出: True
//解释:
//我们可以通过以下几步将start转换成end:
//RXXLRXRXL ->
//XRXLRXRXL ->
//XRLXRXRXL ->
//XRLXXRRXL ->
//XRLXXRRLX
// 
//
// 
//
// 提示： 
//
// 
// 1 <= len(start) = len(end) <= 10000。 
// start和end中的字符串仅限于'L', 'R'和'X'。 
// 
// Related Topics 双指针 字符串 
// 👍 100 👎 0
#include <iostream>
#include <string>

using namespace std;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public:
    bool canTransform(string start, string end) {
        int fp = 0,sp = 0;
        while(sp < start.size() && fp < end.size()){
            if(start[sp] == end[fp]){
                sp++;
                fp++;
            }else if(start[sp] == end[fp+1]){
                char tmp;
                tmp = start[sp++];
                start[sp++] = start[sp];
                start[sp] = tmp;
                sp+2;
                fp+2;
            }else{
                return false;
            }
        }
        return true;
    }
};

int main(){
    Solution solution;
    //"XLLR"
    //"LXLX"
    string start = "XLLR";
    string end = "LXLX";
    bool flag = solution.canTransform(start,end);
    cout<<flag<<endl;
}
//leetcode submit region end(Prohibit modification and deletion)
